﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace TPTecnicas.MailProcessor
{
    public class ConsultaPublicaRule : Rule
    {
        private readonly IRepository _repository;

        public ConsultaPublicaRule(IRepository repository)
        {
            _repository = repository;
        }

        public override bool ApplyTo(IMessage message)
        {
            var match = GetMatch(message);
            if (match.Success)
            {
                var tema = match.Groups["tema"].Value;

                if (!_repository.UsuarioRegistrado(message.Sender))
                    throw new ApplicationException("Debe darse de alta primero.");

                //TODO invocar acciones
                return true;
            }
            else if (message.Subject.Contains("CONSULTA-PUBLICA"))
            {
                //TODO
                //Sería útil, tener alguna estadistica de cuantos mails son recibidos y no matchean a una regla 
                //por lo que son rebotados, como para mejorar la regla o la explicación de la misma
            }
            return false;
        }

        protected override Match GetMatch(IMessage message)
        {
            var regex = new Regex(@"^\[CONSULTA-PUBLICA\] (?<tema>.*)$");
            return regex.Match(message.Subject);
        }
    }
}
